Crate objc_id

Source
Expand description

Rust smart pointers for Objective-C reference counting.

To ensure that Objective-C objects are retained and released at the proper times, we can use the Id struct.

To enforce aliasing rules, an Id can be either owned or shared; if it is owned, meaning the Id is the only reference to the object, it can be mutably dereferenced. An owned Id can be downgraded to a ShareId which can be cloned to allow multiple references.

Weak references may be created using the WeakId struct.

use objc::runtime::{Class, Object};
use objc_id::{Id, WeakId};

let cls = Class::get("NSObject").unwrap();
let obj: Id<Object> = unsafe {
    Id::from_retained_ptr(msg_send![cls, new])
};
// obj will be released when it goes out of scope

// share the object so we can clone it
let obj = obj.share();
let another_ref = obj.clone();
// dropping our other reference will decrement the retain count
drop(another_ref);

let weak = WeakId::new(&obj);
assert!(weak.load().is_some());
// After the object is deallocated, our weak pointer returns none
drop(obj);
assert!(weak.load().is_none());

Structs§

  • A pointer type for Objective-C’s reference counted objects.
  • A pointer type for a weak reference to an Objective-C reference counted object.

Enums§

  • A type used to mark that a struct owns the object(s) it contains, so it has the sole references to them.
  • A type used to mark that the object(s) a struct contains are shared, so there may be other references to them.

Traits§

  • A type that marks what type of ownership a struct has over the object(s) it contains; specifically, either Owned or Shared.

Type Aliases§

  • A convenient alias for a shared Id.